<?php

  require_once 'ExtratorGeneros.php';
  require_once 'FiltroTags.php';
  
/**
 * Classe responsável pela implementação do Crawler, contendo
 * métodos básicos para a realização dessa tarefa.
 *
 * @author tsalles
 * @copyright 2008
 */

class CrawlerGeneros {

	private $filmes;   // armazena a lista de filmes para o gênero
	private $query; // genero que será consultado
    // CONSTRUTOR
    function CrawlerGenero() {
        $this->filmes = array();
    }
    
   /*********************************************************
    * FUNÇÕES PRIVADAS
    *********************************************************/
    
   /**
    * Obtém o documento, através da url (biblioteca cURL))
    */
    private function recuperarConteudoViaURL($url) {

         $handle = @fopen ($url);
         if ($handle === false) return false;
         $buffer = "";
         while (!feof ($handle)) {
             $buffer .= fgets($handle, 4096);
         }
         fclose ($handle);
         return $buffer;
   }
    
   /**
    * Faz o crawling partindo da URL passada como parâmetro.
    * São obtidos os links presentes na página, atualizando
    * as informações pertinentes no banco (hora da visita, 
    * referências, etc). Retorna as urls obtidas.
    */
	private function varreURL($url) {
	    echo $url . "<hr>";
	    $res = $this->recuperarConteudoViaURL($url);
	    echo $res;
	    if ($res == false) {
            echo "PAU !";
            return false;
        }
        $extratorGeneros = new ExtratorGeneros();
        $extratorGeneros->filtrarDocumento($res);

        return $extratorGeneros->obtemElementosFiltrados();
    }
	
    // Inicia o crawling, partindo das URL's sementes
    // http://us.imdb.com/Sections/Genres/types_all
    public function inicia($q) {
        $this->query = $q;
        $res = $this->varreURL("http://us.imdb.com/List?tv=off&&genres=Action");

        if (!$res) {
            return false; // falha.
        }
        else {
            // A lista de filmes foi obtida !
            $this->filmes = $res; 
            return true;
        }
    }
    
    public function obtemFilmes() {
        return $this->filmes;
    }
}

?>